package com.alks.yn_zs.service.serviceImpl;

import com.alibaba.excel.util.StringUtils;
import com.alks.entity.data.response.ResponseInfo;
import com.alks.yn_zs.data.dto.*;
import com.alks.yn_zs.data.request.StatsRequest;
import com.alks.yn_zs.format.DateFormat;
import com.alks.yn_zs.mapper.StitchShowMapper;
import com.alks.yn_zs.service.StitchShowService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;


@Slf4j
@Service
@RequiredArgsConstructor
public class StitchShowServiceImpl implements StitchShowService {

    final private StitchShowMapper stitchShowMapper;

    /**
     * 查询日生产状况》》当日每组入库的情况
     *  PC_STITCH_DETAIL 和 PC_STITCH_SUPPLEMENT_PROD 当天入库数量
     */
    @Override
    public ResponseInfo getDailyProduction(int deptId, StatsRequest request) {
        String companyId = "BF";
        /*初始化*/
        //String unit = StringUtils.isBlank(request.getTitleUnit()) ? DateFormat.DEF_UNIT : request.getTitleUnit();
        //Integer pushUnit = request.getPushUnit() == null ? DateFormat.DEF_PUSH : request.getPushUnit();
        //LocalDate endDate = request.getEndDate() == null ? DateFormat.DEF_END_DATE : request.getEndDate();
        //LocalDate startDate = DateFormat.dateStartFormat(unit, pushUnit, endDate);

        //昨天的数据
        LocalDate yesterday = LocalDate.now().minusDays(1); // 例如：今天日期：2025-10-15，查询的是2025-10-15
        List<StitchDailyProDto> list = stitchShowMapper.getDailyProduction(companyId,deptId,yesterday);
        return ResponseInfo.ok(list);
    }

    /**
     * 查询每组的人均产能
     * (?)组每天的人均产能
     */
    @Override
    public ResponseInfo getPersonProduction(String deptNo,int deptId,StatsRequest request) {
        String companyId = "BF";
        /*初始化*/
        //String unit = StringUtils.isBlank(request.getTitleUnit()) ? DateFormat.DEF_UNIT : request.getTitleUnit();
        //Integer pushUnit = request.getPushUnit() == null ? DateFormat.DEF_PUSH : request.getPushUnit();
        //LocalDate endDate = request.getEndDate() == null ? DateFormat.DEF_END_DATE : request.getEndDate();
        //LocalDate startDate = DateFormat.dateStartFormat(unit, pushUnit, endDate);

        //从昨天开始，往上获取一个星期之内的数据
        // 1. 获取“昨天”
        LocalDate yesterday = LocalDate.now().minusDays(1); // 2025-10-15，今天是10月16日
        // 2. 计算“7天前”（包含昨天，共7天）
        LocalDate startDate = yesterday.minusDays(6); // 2025-10-09
        // 因为：15 - 6 = 9，所以是 10月9日 ~ 10月15日（共7天）

        List<StitchPerMonthProDto> list = stitchShowMapper.getPersonProduction(companyId,deptNo,deptId,startDate,yesterday);
        return ResponseInfo.ok(list);
    }

    /**
     * 查询月生产状况
     * 所有组当前月的总产量
     */
    @Override
    public ResponseInfo getMonthProduction(int deptId , StatsRequest request) {
        //String companyId = UserIdThread.get().getCompanyId();
        String companyId = "BF";
        /*初始化*/
        //String unit = StringUtils.isBlank(request.getTitleUnit()) ? DateFormat.DEF_UNIT : request.getTitleUnit();
        //Integer pushUnit = request.getPushUnit() == null ? DateFormat.DEF_PUSH : request.getPushUnit();
        //LocalDate endDate = request.getEndDate() == null ? DateFormat.DEF_END_DATE : request.getEndDate();
        //LocalDate startDate = DateFormat.dateStartFormat(unit, pushUnit, endDate);

        //时间是从昨天往上推的一个月时间
        //// 计算“昨天”
        //LocalDate yesterday = LocalDate.now().minusDays(1); // 如今天10月16》》2025-10-15
        //// 计算“一个月前的同一天”（自动处理跨月、跨年、闰年等）
        //LocalDate startDate = yesterday.minusMonths(1); // 2025-09-15

        // 计算“昨天”
        LocalDate yesterday = LocalDate.now().minusDays(1); // 例如：今天10月22日，取2025-10-21

        // 获取当前月的第一天（即“当月1号”）
        LocalDate startDate = yesterday.withDayOfMonth(1); // 例如：2025-10-01
        List<StitchMonthProDto> list = stitchShowMapper.getMonthProduction(companyId,deptId,startDate,yesterday);
        return ResponseInfo.ok(list);
    }

    /**
     * 查询所有组别
     * @return
     */
    @Override
    public ResponseInfo getdeptList(int deptId){
        //String companyId = UserIdThread.get().getCompanyId();
        String companyId = "BF";
        List<DeptDto> list = stitchShowMapper.getdeptList(companyId,deptId);
        return ResponseInfo.ok(list);
    }


}
